﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WebUI.SmartDatingRef;

namespace WebUI {
    /// <summary>
    /// Maps status codes to human-readable messages.
    /// </summary>
    class Status {
        private Status() {
        }

        private static string[] STATUS_TO_MESSAGE = { 
            "Операция завершена неудачно." /* Failure */,
            "Операция завершена успешно." /* Success */,
            "Введен неверный адрес электронной почты или пароль." /* InvalidEmail */,
            "Введен неверный адрес электронной почты или пароль." /* InvalidEmailOrPassword */,
            "Ошибка связи: неправильный ключ сессии. Попробуйте чуть позже." /* InvalidSessionKey */,
            "Эта операция доступна только для пользователей, вошедших в службу." /* NotAuthenticated */,
            "Пользователь с таким адресом почты уже зарегистрирован. Выберите другой адрес." /* AccountAlreadyExists */,
            "Личная анкета еще не заполнена." /* NoPersonalData */,
            "Местоположение неизвестно." /* NoLocation */,
            "Такого пользователя-получателя не существует." /* NoRecipient */,
            "Сообщение не найдено." /* MessageNotFound */,
            "Невозможно переместить сообщения в эту папку." /* IllegalDestination */,
            "Ошибка поиска: неправильный дескриптор. Попробуйте чуть позже." /* InvalidSearchDescriptor */,
            "Попытка повторно добавить уже имеющийся критерий поиска." /* DuplicateSearchCriteria */,
            "Критерий поиска не обнаружен." /* SearchCriteriaNotFound */,
            "Не задано ни одного критерия поиска. Поиск невозможен." /* NoCriteriasDefined */,
            "Не найдено участников, удовлетворяющих заданным критериям. Попробуйте обобщить запрос." /* NoMembersFound */,
            "Неизвестный критерий поиска." /* UnknownSearchCriteria */};

        /// <summary>
        /// Gets status message by a status code
        /// </summary>
        /// <param name="s">status code</param>
        /// <returns>human-readable status message</returns>
        /// <exception cref="ArgumentException">Status code not in the range of legal and known status codes.</exception>
        public static string m(OperationStatus s) {
            if ((int)s < 0 || (int)s > STATUS_TO_MESSAGE.Length - 1) {
                throw new ArgumentException("s");
            }
            return STATUS_TO_MESSAGE[(int) s];
        }

        public static bool SUCCESS(OperationStatus s) {
            return (s == OperationStatus.Success);
        }
    }
}
